package com.cloudsea.yunhaistores.vo;

import io.swagger.v3.oas.annotations.media.Schema;
import lombok.Data;
import java.util.List;
import java.util.Map;


/**
 * 完整的门店菜单视图对象 (View Object)
 * 这个类是专门为了向前端展示结构化的菜单而设计的。
 */
@Data
@Schema(description = "完整的门店菜单视图对象")
public class MenuVO {

    /**
     * 菜单的核心内容，按商品分类进行组织
     */
    private List<CategoryVO> categories;

    // --- 以下是定义在 MenuVO 内部的静态类 ---

    /**
     * 代表一个商品分类
     */
    @Data
    @Schema(description = "商品分类视图对象")
    public static class CategoryVO {
        @Schema(description = "分类名称, e.g., '主食', '饮品'")
        private String name;

        @Schema(description = "该分类下的所有商品(SPU)列表")
        private List<SpuVO> spus;
    }

    /**
     * 代表一个标准商品单元 (SPU - Standard Product Unit)
     * 例如 "拿铁咖啡"，它是一个抽象的商品概念
     */
    @Data
    @Schema(description = "标准商品单元(SPU)视图对象")
    public static class SpuVO {
        private Long id;

        @Schema(description = "SPU名称, e.g., '经典牛肉堡'")
        private String name;

        @Schema(description = "SPU的详细描述")
        private String description;

        @Schema(description = "SPU的主图URL")
        private String imageUrl;

        private String categoryName;

        @Schema(description = "该SPU下所有具体的、可售卖的规格(SKU)列表")
        private List<SkuVO> skus;

        @Schema(description = "该SPU的所有可选属性，如'口味', '加料'等")
        private List<AttributeVO> attributes;
    }

    /**
     * 代表一个库存量单位 (SKU - Stock Keeping Unit)
     * 例如 "大杯冰拿铁"，是用户真正购买的具体商品
     */
    @Data
    @Schema(description = "库存量单位(SKU)视图对象")
    public static class SkuVO {
        private Long id;

        @Schema(description = "SKU的规格名称, e.g., '大杯' 或 '大份/微辣'")
        private String name;

        @Schema(description = "SKU的售卖价格 (单位:分)")
        private Long price;

        @Schema(description = "SKU的当前库存。0表示已售罄")
        private Integer stock;

        @Schema(description = "SKU的图片URL (如果与SPU主图不同)")
        private String imageUrl;

        @Schema(description = "SKU的详细规格，是一个键值对，方便前端解析")
        private Map<String, String> specs; // e.g., {"容量": "大杯", "温度": "冰"}
    }

    /**
     * 代表一个商品属性，它不影响价格和库存
     */
    @Data
    @Schema(description = "商品属性视图对象")
    public static class AttributeVO {
        @Schema(description = "属性名, e.g., '辣度'")
        private String name;

        @Schema(description = "该属性的所有可选值列表, e.g., ['不辣', '微辣', '中辣']")
        private List<String> options;
    }
}